100 REM ************************* 110 REM * DEMOPROGRAMM FUER * 120 REM * RELATIVE DATEIVER- * 130 REM * VERWALTUNG * 140 REM * 1995 BY 64'ER MAGAZIN * 150 REM ************************* 597 REM ************************* 598 REM * PROGRAMM-HANDLER * 599 REM ************************* 600 GA=8: REM FLOPPY-GERAETEADRESSE 605 MP=1: REM FLAG FUER MENUEPUNKTEWAHL 606 GOSUB800: REM DIMENSIONIERUNG 610 POKE53280,1:POKE53281,1:POKE646,0:PRINTCHR$(14)CHR$(8)CHR$(147) 612 FOR I=1 TO 6 613 READ ME$(I) 614 NEXT I 615 GOSUB9900 620 PRINTCHR$(19)CHR$(13)CHR$(13)TAB(10)CHR$(18)" [210][197][204][193][212][201][214][197] [193][196][210][197][211][211][196][193][212][197][201] "CHR$(13) 629 FOR C=1 TO 6 630 IFMP=C THEN PRINTTAB(10)CHR$(18)ME$(MP) 635 IFMP<>C THEN PRINTTAB(10)ME$(C) 640 NEXT C 680 GET T$ 682 IFT$=CHR$(17)THEN MP=MP+1:IFMP>6THENMP=1 684 IFT$=CHR$(145)THEN MP=MP-1:IFMP<1THENMP=1 686 IFT$=CHR$(13)THEN 780 690 GOTO620 780 ON MP GOSUB 1100,9000,7000,8000,2500,2400 790 GOTO 620 797 REM **************************** 798 REM * VARIABLEN DIMENSIONIEREN * 799 REM **************************** 800 DM=400: REM VORGESEHENE DATENSATZANZAHL 810 DIM ID$(DM): REM SCHLUESSELWORT (INDEXFELD) 820 DIM IN(DM): REM DAZUGEHOERIGE RECORDNUMMER 830 DIM DS$(6): REM DATENFELDER - BEI BEDARF ERHOEHEN ODER REDUZIEREN! 840 RETURN 987 REM **************************** 988 REM * REL.DATEI ANLEGEN/OEFFNEN* 989 REM **************************** 990 REM LF=LOG.FILENUMMER 991 REM SA=SEKUNDAERADRESSE 992 REM DN$=DATEINAME 993 REM RL=RECORDLAENGE 1000 OPEN15,8,15: REM FLOPPY-KOMMANDOKANAL OEFFNEN 1010 OPEN LF,GA,SA,DN$+",L,"+CHR$(RL): REM REL-DATEI OEFFNEN 1020 RETURN 1097 REM ************************ 1098 REM * DATEI INITIALISIEREN * 1099 REM ************************ 1100 LF=1:SA=2:DN$="ADRESSEN":RL=151:GOSUB1000: REM REL-DATEI ADRESSEN OEFFNEN 1110 OPEN2,8,3,"INDEX,S,R": REM SEQ-DATEI INDEX ZUM LESEN OEFFNEN 1120 GOSUB4000: REM FEHLERKANAL LESEN 1130 IF ER<>0 THEN AD=0:GOTO1190: REM DATEI NOCH NICHT ANGELEGT 1135 INPUT#2,AD: REM ANZAHL DER DATENSAETZE 1140 FOR I=1 TO AD 1142 INPUT#2,ID$(I),IN(I) 1144 NEXT I: REM INDEXDATEI LESEN 1190 FL=1: REM KENNZEICHEN 'DATEI IM RECHNER' 1192 CLOSE 2: REM SEQ. INDEXDATEI SCHLIESSEN 1195 PRINTCHR$(13)CHR$(13)TAB(9)"WAEHLEN MIT <[195][210][211][210] AUF/AB>" 1196 PRINTTAB(10)"AKTIVIEREN MIT <[210][197][212][213][210][206]>" 1199 RETURN 1987 REM **************************** 1988 REM * AUF RECORD POSITIONIEREN * 1989 REM **************************** 1990 REM SA = SEKUNDAERADRESSE 1991 REM RN = RECORD-NUMMER 1992 REM RP = POSITION IN RECORD 2000 HB=INT(RN/256): LB=RN-256*HB: REM RECORD-NR. IN HIGH/LOW-BYTE TEILEN 2010 PRINT#15,"P"+CHR$(SA)+CHR$(LB)+CHR$(HB)+CHR$(RP) 2020 RETURN 2397 REM ************************ 2398 REM * PROGRAMM BEENDEN * 2399 REM ************************ 2400 CLOSE1:CLOSE15:OPEN4,8,15,"I":CLOSE4:PRINTCHR$(147):END 2497 REM ************************ 2498 REM * DATEIARBEIT BEENDEN * 2499 REM ************************ 2500 IF FL=0 THEN GOSUB9500: RETURN 2509 PRINT#15,"S:INDEX": REM ALTE INDEXDATEI LOESCHEN 2510 OPEN2,8,3,"INDEX,S,W": REM AKTUALISIERTE INDEXDATEI ZUM SCHREIBEN OEFFNEN 2520 PRINT#2,AD: REM ANZAHL DER RECORDS 2530 FOR C=1 TO AD 2540 PRINT#2,ID$(C)","IN(C) 2550 NEXT C: REM INDEXDATEI SICHERN 2560 GOSUB 3000 2570 PRINTCHR$(147):END 2996 REM ************************ 2997 REM * REL-DATEI SCHLIESSEN * 2998 REM ************************ 2999 REM LF=LOG. FILENUMMER 3000 CLOSE LF: REM REL-DATEI SCHLIESSEN 3010 CLOSE 15: REM FLOPPY-KANAL SCHL. 3020 RETURN 3997 REM ********************** 3998 REM * FLOPPY-FEHLERKANAL * 3999 REM ********************** 4000 INPUT#15,ER,ER$,TR,SK 4010 REM PRINT ER;ER$;TR;SK:OHNE 'REM' ERSCHEINT FEHLERMELDUNG AUF DEM SCREEN! 4020 RETURN 4996 REM ********************** 4997 REM * FELDL. KORRIGIEREN * 4998 REM ********************** 4999 REM BEISPIEL FUER SECHS DATENFELDER DS$(1)-DS$(6) 5000 LE$=" ": REM LEERSTRING ZUM AUFFUELLEN 5010 DS$(1)=LEFT$(DS$(1)+LEFT$(LE$,ABS(25-LEN(DS$(1)))),25): REM NACHNAME 5020 DS$(2)=LEFT$(DS$(2)+LEFT$(LE$,ABS(25-LEN(DS$(2)))),25): REM VORNAME 5030 DS$(3)=LEFT$(DS$(3)+LEFT$(LE$,ABS(25-LEN(DS$(3)))),25): REM STRASSE 5040 DS$(4)=LEFT$(DS$(4)+LEFT$(LE$,ABS(25-LEN(DS$(4)))),25): REM POSTLEITZAHL 5050 DS$(5)=LEFT$(DS$(5)+LEFT$(LE$,ABS(25-LEN(DS$(5)))),25): REM WOHNORT 5060 DS$(6)=LEFT$(DS$(6)+LEFT$(LE$,ABS(25-LEN(DS$(6)))),25): REM TELEFON 5099 RETURN 5997 REM ************************* 5998 REM * RECORD ZUSAMMENFASSEN * 5999 REM ************************* 6000 RC$="":REM VARIABLE FUER INHALT DES GESAMT-RECORDS 6010 FOR C=1 TO 6: REM =MENGE! 6020 RC$=RC$+DS$(C) 6030 NEXT C 6040 RETURN 6997 REM ************************* 6998 REM * DATEN EINGEBEN * 6999 REM ************************* 7000 IF FL=0 THEN GOSUB9500: RETURN 7009 PRINTCHR$(147)LEFT$(LA$,79) 7010 PRINTCHR$(19)CHR$(18)TAB(2)" [196]ATENEINGABE-[205]ASKE "TAB(23)"[210]ECORD-[206]R.: ";AD+1 7015 PRINT 7020 PRINTTAB(2)"[206]ACHNAME: " 7022 PRINTTAB(2)"[214]ORNAME : " 7024 PRINTTAB(2)"[211]TRASSE : " 7026 PRINTTAB(2)"[208][204][218] : " 7028 PRINTTAB(2)"[215]OHNORT : " 7030 PRINTTAB(2)"[212]ELEFON : " 7032 PRINT:PRINTLEFT$(LA$,79) 7040 SP=12: REM EINGABESPALTE BLEIBT GLEICH! 7045 FOR ZL=2 TO 7 7047 GOSUB 7900: REM EINGABE-CURSOR POSITIONIEREN 7050 POKE19,64:INPUTDS$(ZL-1):POKE19,0:PRINT 7060 NEXT ZL 7070 REM EINGABE IN INDEXDATEI VERMERKEN 7080 AD=AD+1: RN=AD: REM DATENSATZANZAHL INKREMENTIEREN 7090 ID$(AD)=DS$(1): REM SCHLUESSELDATENFELD 7100 IN(AD)=RN: REM RECORDNUMMER 7110 : 7120 REM DATENFELDER MIT PASSENDER LAENGE AUSSTATTEN 7130 GOSUB 5000: REM UNTERPROGRAMM MUSS AUF SECHS DATENFELDER EINGERICHTET SEIN 7199 : 7200 REM DATENEINGABE ZUR SPEICHERUNG ZUSAMMENFASSEN 7210 GOSUB 6000 7228 REM *********************** 7229 REM * DATENSATZ SPEICHERN * 7230 REM *********************** 7240 RN=AD:RP=1:GOSUB 2000: REM RECORD POSITIONIEREN 7250 PRINT#LF,RC$: REM DATENSATZ SCHREIBEN 7260 GOSUB 4000: REM FEHLERKANAL 7270 PRINTCHR$(13)TAB(6)CHR$(18)" [196]ATENSATZ WURDE GESICHERT!" 7272 FOR T=1 TO 1500: NEXT T: PRINTCHR$(147) 7280 GOSUB9900:RETURN 7888 REM ************************* 7898 REM * CURSOR-POSITIONIERUNG * 7899 REM ************************* 7900 POKE214,ZL:POKE 211,SP 7902 SYS 58640 7904 RETURN 7997 REM ************************* 7998 REM * DATEN AUSGEBEN * 7999 REM ************************* 8000 IF FL=0 THEN GOSUB 9500 :RETURN 8010 PRINTCHR$(147):POKE19,64:INPUT"[201]NDEX-[194]EGR.:";IX$:POKE19,0:REM INDEXABFRAGE 8020 FOR C=1 TO AD: REM INDEXDATEI DURCHSUCHEN 8030 IF IX$=ID$(C) THEN GN=C:C=AD:NEXT C:GOTO 8100: REM INDEX GEFUNDEN 8040 NEXT C 8050 PRINTCHR$(147)"[211]CHLUESSELWORT FALSCH ODER":PRINT"NICHT VORHANDEN!" 8052 FORT=1 TO 1000:NEXT 8060 PRINTCHR$(147):GOSUB9900:RETURN 8100 RN=GN:RP=1:RC$="":GOSUB2000:REM RECORD POSTIONIEREN 8110 FORI=1 TO RL-1 8111 GET#LF,BY$:RC$=RC$+BY$ 8112 NEXT I 8119 REM ************************** 8120 REM * GESAMTSTRING AUFTEILEN * 8121 REM ************************** 8130 DS$(1)=MID$(RC$,1,25): REM NACHNAME 8132 DS$(2)=MID$(RC$,26,25): REM VORNAME 8134 DS$(3)=MID$(RC$,51,25): REM STRASSE 8136 DS$(4)=MID$(RC$,76,25): REM PLZ 8137 DS$(5)=MID$(RC$,101,25): REM WOHNORT 8138 DS$(6)=MID$(RC$,126,25): REM TELEFON 8139 REM ***************************** 8140 REM DATENSATZ AUF SCREEN AUSGEBEN 8141 REM ***************************** 8142 PRINTCHR$(147)LEFT$(LA$,79) 8143 PRINTCHR$(19)CHR$(18)TAB(2)" [196]ATENAUSGABE "TAB(23)"[210]ECORD-[206]R.: ";RN 8150 PRINTCHR$(13):FOR C=1 TO 6 8160 PRINTTAB(5)DS$(C) 8170 NEXT C 8172 PRINT:PRINTLEFT$(LA$,79)+CHR$(145)+CHR$(145) 8180 GOSUB8300 8185 PRINTCHR$(147):GOSUB9900:RETURN 8195 REM ************************** 8196 REM * DRUCKAUSGABE * 8197 REM ************************** 8200 OPEN4,4,7:CMD1 8210 PRINT#4,"[210]ECORD-[206]R.:";STR$(RN) 8220 FOR C=1 TO 6 8230 PRINT#4,DS$(C) 8240 NEXT 8250 PRINT#4:CLOSE4 8260 RETURN 8300 PRINT:PRINT" [196]ATENSATZ "CHR$(18)"D"CHR$(146)"RUCKEN "; 8305 PRINTCHR$(18)"E"CHR$(146)"DITIEREN "CHR$(18)"[200]"CHR$(146)"AUPTMENUE " 8310 GETT$ 8320 IFT$="D"THENGOSUB8200:RETURN 8330 IFT$="E"THENGOSUB8400:RETURN 8335 IFT$="H"THENRETURN 8340 GOTO8310 8400 PRINTCHR$(147)LEFT$(LA$,79) 8410 PRINTCHR$(19)CHR$(18)TAB(2)" [196]ATENSATZ EDITIEREN "TAB(23)"[210]ECORD-[206]R.: ";RN 8420 PRINT 8430 PRINTTAB(2)"[206]ACHNAME: ";DS$(1) 8440 PRINTTAB(2)"[214]ORNAME : ";DS$(2) 8450 PRINTTAB(2)"[211]TRASSE : ";DS$(3) 8460 PRINTTAB(2)"[208][204][218] : ";DS$(4) 8470 PRINTTAB(2)"[215]OHNORT : ";DS$(5) 8480 PRINTTAB(2)"[212]ELEFON : ";DS$(6) 8490 PRINT:PRINTLEFT$(LA$,79) 8500 SP=12: REM EINGABESPALTE BLEIBT GLEICH! 8510 FOR ZL=2 TO 7 8520 GOSUB 7900: REM EINGABE-CURSOR POSITIONIEREN 8540 POKE19,64:INPUTDS$(ZL-1):POKE19,0:PRINT 8550 NEXT ZL 8552 ID$(RN)=DS$(1): IN(RN)=RN 8560 GOSUB 5000: GOSUB 6000 8565 RP=1: GOSUB 2000: GOSUB 7250 8570 RETURN 9000 PRINTCHR$(147) 9010 FORI=1TOAD 9020 PRINTID$(I) 9030 NEXT I 9040 PRINT:PRINTCHR$(18)" [212][193][211][212][197] " 9050 POKE198,0:WAIT198,1 9060 MP=4:GOSUB 9900: RETURN 9497 REM ************************** 9498 REM * KEINE DATEI GEOEFFNET! * 9499 REM ************************** 9500 PRINTCHR$(147):GOSUB 9900 9530 PRINTCHR$(19)CHR$(13)CHR$(13)TAB(13)" [198][197][200][204][197][210][205][197][204][196][213][206][199] "CHR$(13)CHR$(13) 9535 PRINTTAB(12)"[196]ATEI WURDE NOCH" 9536 PRINTTAB(12)"NICHT INITIALISIERT" 9537 PRINTTAB(12)"ODER ANGELEGT!!!" 9590 FORT=1TO1500:NEXT 9592 PRINTCHR$(147):GOSUB9900 9599 RETURN 9897 REM ************************* 9898 REM * UNTERPR. WINDOW * 9899 REM ************************* 9900 E1$="[176]":E2$="[174]":E3$="[173]":E4$="[189]" 9901 UL$="[171]":UR$="[179]":LN$="" 9904 FORI=1TO22:LN$=LN$+"[192]":NEXT 9905 LA$=LN$+LN$ 9906 PRINTCHR$(19):PRINTTAB(9)E1$LN$E2$ 9907 ZL=2:SP=9:GOSUB7900 9908 FOR C=1 TO 8 9910 PRINTTAB(9)"[221]"TAB(32)"[221]" 9911 NEXT C 9913 PRINTTAB(9)E3$LN$E4$ 9915 ZL=3:SP=9:GOSUB7900 9916 PRINTTAB(9)UL$LN$UR$ 9920 RETURN 9997 REM ************************* 9998 REM * MENUEPUNKTE * 9999 REM ************************* 10000 DATA" [196]ATEI INITIALISIEREN " 10005 DATA" [211]UCHBEGRIFF-[204]ISTE " 10010 DATA" [196]ATENEINGABE " 10020 DATA" [196]ATENAUSGABE " 10030 DATA" [196]ATEI SCHLIESSEN " 10040 DATA" [208]ROGRAMM BEENDEN "